package ec.linde.persistencia.entidades.proyectos;

import static javax.persistence.GenerationType.IDENTITY;

import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import ec.linde.persistencia.entidades.ProdConceptosMateriales;
import ec.linde.persistencia.entidades.ProdPartidaDetalle;

/**
 * TODO: Agregar descripcion
 * 
 * @FechaCreacion: 29/09/2014
 * @author: Alex Carrillo
 * @FechaModificacion: 29/09/2014
 * @author: Alex Carrillo
 * @version: 1.0
 */
@Entity
@Table(name = "prod_detalle_registro_material", schema = "productividad")
public class DetalleRegistroMaterial extends EntidadBase {

	private static final long serialVersionUID = 3935545106378163867L;

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "drma_id", unique = true, nullable = false)
	private int idDetalleRegistroMaterial;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "pade_id", nullable = false)
	private ProdPartidaDetalle partida;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "coma_id", nullable = false)
	private ProdConceptosMateriales conceptoMaterial;

	@Column(name = "drma_cantidad", nullable = false, precision = 12, scale = 6)
	@NotNull
	@Digits(integer = 12, fraction = 2)
	@Min(value = 0)
	private BigDecimal cantidad = BigDecimal.ZERO;

	@Column(name = "drma_descripcion", nullable = true, length = 200)
	@Size(max = 200)
	private String descripcion;

	@Column(name = "drma_entregar", nullable = false)
	@NotNull
	private boolean entregar=true;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "remb_id", nullable = true)
	private RegistroMaterial registroMaterial;

	// Registro Material Bodega
	@Column(name = "drma_cantidad_entregada", nullable = false, precision = 12, scale = 6)
	@NotNull
	@Digits(integer = 12, fraction = 2)
	@Min(value = 0)
	private BigDecimal cantidadEntregada = BigDecimal.ZERO;

	@Column(name = "drma_cantidad_reingresada", nullable = false, precision = 12, scale = 6)
	@NotNull
	@Digits(integer = 12, fraction = 2)
	@Min(value = 0)
	private BigDecimal cantidadReingresada = BigDecimal.ZERO;

	@Column(name = "drma_cantidad_efectiva_bodega", nullable = false, precision = 12, scale = 6)
	@NotNull
	@Digits(integer = 12, fraction = 2)
	@Min(value = 0)
	private BigDecimal cantidadEfectivaBodega = BigDecimal.ZERO;

	@Column(name = "drma_descripcion_entrega", nullable = true, length = 200)
	@Size(max = 200)
	private String descripcionEntrega;

	// Registro Material Contratista
	@Column(name = "drma_cantidad_recibida", nullable = false, precision = 12, scale = 6)
	@NotNull
	@Digits(integer = 12, fraction = 2)
	@Min(value = 0)
	private BigDecimal cantidadRecibida = BigDecimal.ZERO;

	@Column(name = "drma_cantidad_devuelta", nullable = false, precision = 12, scale = 6)
	@NotNull
	@Digits(integer = 12, fraction = 2)
	@Min(value = 0)
	private BigDecimal cantidadDevuelta = BigDecimal.ZERO;

	@Column(name = "drma_cantidad_efectiva_contratista", nullable = false, precision = 12, scale = 6)
	@NotNull
	@Digits(integer = 12, fraction = 2)
	@Min(value = 0)
	private BigDecimal cantidadEfectivaContratista = BigDecimal.ZERO;

	@Column(name = "drma_descripcion_recibo", nullable = true, length = 200)
	@Size(max = 200)
	private String descripcionRecibo;

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.asinfo.as2.entities.EntidadBase#getId()
	 */
	@Override
	public int getId() {
		return this.idDetalleRegistroMaterial;
	}

	public int getIdDetalleRegistroMaterial() {
		return idDetalleRegistroMaterial;
	}

	public void setIdDetalleRegistroMaterial(int idDetalleRegistroMaterial) {
		this.idDetalleRegistroMaterial = idDetalleRegistroMaterial;
	}

	public ProdPartidaDetalle getPartida() {
		return partida;
	}

	public void setPartida(ProdPartidaDetalle partida) {
		this.partida = partida;
	}

	public ProdConceptosMateriales getConceptoMaterial() {
		return conceptoMaterial;
	}

	public void setConceptoMaterial(ProdConceptosMateriales conceptoMaterial) {
		this.conceptoMaterial = conceptoMaterial;
	}

	public BigDecimal getCantidad() {
		return cantidad;
	}

	public void setCantidad(BigDecimal cantidad) {
		this.cantidad = cantidad;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public boolean isEntregar() {
		return entregar;
	}

	public void setEntregar(boolean entregar) {
		this.entregar = entregar;
	}

	public RegistroMaterial getRegistroMaterial() {
		return registroMaterial;
	}

	public void setRegistroMaterial(RegistroMaterial registroMaterial) {
		this.registroMaterial = registroMaterial;
	}

	public BigDecimal getCantidadEntregada() {
		return cantidadEntregada;
	}

	public void setCantidadEntregada(BigDecimal cantidadEntregada) {
		this.cantidadEntregada = cantidadEntregada;
	}

	public BigDecimal getCantidadReingresada() {
		return cantidadReingresada;
	}

	public void setCantidadReingresada(BigDecimal cantidadReingresada) {
		this.cantidadReingresada = cantidadReingresada;
	}

	public BigDecimal getCantidadEfectivaBodega() {
		return cantidadEfectivaBodega;
	}

	public void setCantidadEfectivaBodega(BigDecimal cantidadEfectivaBodega) {
		this.cantidadEfectivaBodega = cantidadEfectivaBodega;
	}

	public String getDescripcionEntrega() {
		return descripcionEntrega;
	}

	public void setDescripcionEntrega(String descripcionEntrega) {
		this.descripcionEntrega = descripcionEntrega;
	}

	public BigDecimal getCantidadRecibida() {
		return cantidadRecibida;
	}

	public void setCantidadRecibida(BigDecimal cantidadRecibida) {
		this.cantidadRecibida = cantidadRecibida;
	}

	public BigDecimal getCantidadDevuelta() {
		return cantidadDevuelta;
	}

	public void setCantidadDevuelta(BigDecimal cantidadDevuelta) {
		this.cantidadDevuelta = cantidadDevuelta;
	}

	public BigDecimal getCantidadEfectivaContratista() {
		return cantidadEfectivaContratista;
	}

	public void setCantidadEfectivaContratista(BigDecimal cantidadEfectivaContratista) {
		this.cantidadEfectivaContratista = cantidadEfectivaContratista;
	}

	public String getDescripcionRecibo() {
		return descripcionRecibo;
	}

	public void setDescripcionRecibo(String descripcionRecibo) {
		this.descripcionRecibo = descripcionRecibo;
	}

}
